package com.are.manejadores;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.are.odisea.Categoria;
import com.are.odisea.db;

public class ManejadorCategoria {
	private Categoria categoria;
	private db conexion = null;
	public Categoria getCategoria() {
		return categoria;
	}
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public ManejadorCategoria(db conexion) {
		super();
		this.conexion = conexion;
	}
	public ManejadorCategoria(Categoria categoria, db conexion) {
		super();
		this.categoria = categoria;
		this.conexion = conexion;
	}
	
	public boolean add(Categoria categoria) throws SQLException {
		boolean result = false;
		String sql = "insert into categorias (descripcion,padreid,nivel) values (?,?,?)";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, categoria.getDescripcion());
		pst.setInt(2, categoria.getParent());
		pst.setInt(3, categoria.getNivel());
		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}
		
		return result;
	}
	
	public boolean update(Categoria categoria) throws SQLException {
		boolean result = false;
		String sql = "update categorias set descripcion=?,padreid=?, nivel=? where id=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, categoria.getDescripcion());
		pst.setInt(2, categoria.getParent());
		pst.setInt(3, categoria.getNivel());
		pst.setInt(3, categoria.getId());
		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}
		
		return result;
	}

	public boolean remove(int id) throws SQLException {
		boolean result = false;
		String sql = "delete from categorias where id=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setInt(1, id);
		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}
		
		return result;
	}
	
	public ArrayList<Categoria> List(int nivel, int parent) throws SQLException {
		ArrayList<Categoria> lista = new ArrayList<Categoria>();
		String sql = "select * from categorias where nivel=? and padreid=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setInt(1, nivel);
		pst.setInt(2, parent);
		ResultSet rs = conexion.Query(pst);
		while (rs.next()) {
			Categoria categoria = new Categoria();
			categoria.setId(rs.getInt("id"));
			categoria.setDescripcion(rs.getString("descripcion"));
			categoria.setNivel(rs.getInt("nivel"));
			categoria.setParent(rs.getInt("padreid"));
			lista.add(categoria);
		}
		
		return lista;
	}
	
	public boolean Find(int id) throws SQLException {
		boolean result = false;
		String sql = "select * from categorias where id=?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setInt(1, id);
		ResultSet rs = conexion.Query(pst);
		if (rs.next()) {
			categoria = new Categoria();
			categoria.setId(rs.getInt("id"));
			categoria.setDescripcion(rs.getString("descripcion"));
			categoria.setNivel(rs.getInt("nivel"));
			categoria.setParent(rs.getInt("padreid"));
			result = true;
		}
		return result;
	}


}
